package com.neusoft.elm.framework;

import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fasterxml.jackson.databind.ObjectMapper;


@WebServlet("/")
public class DispatcherServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
	ServletException, IOException {
		//中文编码处理
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	response.setContentType("application/json;charset=utf-8");
	//获取客户端请求路径(/HelloController/say)
	String path = request.getServletPath();
	//根据请求路径，将Controller的类名和方法名解析出来
	String className = path.substring(1,path.lastIndexOf("/"));
	String methodName = path.substring(path.lastIndexOf("/")+1);
	PrintWriter out = null;
	//判断请求路径，根据不同的请求，分发给不同的业务处理器
	try{
		//通过Controller类全名获取此类的所有信息
		Class clazz = Class.forName("com.neusoft.elm.controller."+className);
		//创建Controller类的对象
		Object controller = clazz.newInstance();
		//获取Controller类对象中的方法
		Method method = clazz.getMethod(methodName,new Class[]{HttpServletRequest.class});
		//调用上面获取的方法
		Object result = method.invoke(controller,new Object[]{request});
		//获取向客户端响应的输出流
		out = response.getWriter();
		ObjectMapper om = new ObjectMapper();
		//向客户端响应json数据
		out.print(om.writeValueAsString(result));
		
	}catch(Exception e){
		e.printStackTrace();
		System.out.println("DispatcherServlet信息：请求url："+path);
		System.out.println("DispatcherServlet信息：类名："+className+"\t方法名："+methodName);
	}finally {
		out.close();
	}
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
	ServletException, IOException {
		doPost(request,response);
 }
}
